import 'package:flutter/cupertino.dart';

///类（Classes）

///1、对象
// Dart 是一种面向对象的语言，并且支持基于mixin的继承方式。
// Dart 语言中所有的对象都是某一个类的实例,所有的类有同一个基类--Object。
// 基于mixin的继承方式具体是指：一个类可以继承自多个父类。
void main() {
  var point = new Point(1, 3);
  print('${point.x}');
  switch (Season.spring) {
    case Season.spring:
      print('1-3月');
      break;
    case Season.summer:
      print('4-6月');
      break;
    case Season.autumn:
      print('7-9月');
      break;
    case Season.winter:
      print('10-12月');
      break;
  }
  var person = Imposter();
  person.greet("who");
}

//带参构造
class Point {
  num x; // Declare instance variable x, initially null.
  num y; // Declare y, initially null.
  //构造函数(Constructors)
  Point(this.x, this.y);

  // greetBob(Person person) => person.greet('bob');

  @override
  String toString() {
    return ("x: $x, y: $y");
  }
}

//继承
class Parent {
  num x;
  num y;

  Parent(this.x, this.y) {
    print('In Parent\'s constructor.');
  }
}

class Child extends Parent {
  Child(num x, num y) : super(x, y) {
    print('In Child\'s constructor.');
  }
}

///get与set
class Rectangle {
  num left;
  num top;
  num width;
  num height;

  Rectangle(this.left, this.top, this.width, this.height);

  //
  // 定义两个计算属性: right and bottom.
  num get right => left + width;

  set right(num value) => left = value - width;

  num get bottom => top + height;

  set bottom(num value) => top = value - height;
}

//抽象类
abstract class Doer {
  // ...定义实例变量和方法...
  void doSomething(); // 定义一个抽象方法。
}

class EffectiveDoer extends Doer {
  @override
  void doSomething() {}

  void MyFun() {}
}

///枚举类型
enum Season { spring, summer, autumn, winter }

/// 类-隐式接口

// 一个 person ，包含 greet() 的隐式接口。
class Person {
  // 在这个接口中，只有库中可见。
  final _name;

  // 不在接口中，因为这是个构造函数。
  Person(this._name);

  // 在这个接口中。
  String greet(who) => 'Hello, $who. I am $_name.';
}

//  Person 接口的一个实现。
class Imposter implements Person {
  @override
  // TODO: implement _name
  get _name => "";

  @override
  String greet(who) => "Hi_you know who I am?";
}


